﻿using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

namespace IDAdmin.Lib
{
    /// <summary>
    /// Các hằng số quy định mốc level của nhóm user
    /// </summary>
    public class WebUserLevel
    {
        public const int CUSTOMER = 0;
        public const int PARTNER = 10;
        public const int CUSTOMER_CARE = 50;
        public const int MOD = 100;
        public const int ADMIN = 1000;
        public const int SUPPERADMIN = 10000;
    }

    /// <summary>
    /// Các hằng chuỗi quy định tên của nhóm user
    /// </summary>
    public class WebUserType
    {
        public const string UNKNOWN = "Unknown";
        public const string CUSTOMER = "Customer";
        public const string PARTNER = "Partner";
        public const string CUSTOMER_CARE = "Care";
        public const string MOD = "Mod";
        public const string ADMIN = "Admin";
        public const string SUPPERADMIN = "SupperAdmin";      
    }

    public class WebUser
    {
        public WebUser()
        { 
        }

        /// <summary>
        /// Lấy thông tin về người sử dụng đang đăng nhập hệ thống
        /// </summary>
        public void GetInfo()
        {            
            string userInfo = HttpContext.Current.User.Identity.Name;
            if (HttpContext.Current.User.Identity.IsAuthenticated)
            {
                string[] userPart = userInfo.Split(';');
                {
                    _ID = userPart[0];
                    _UserName = userPart[1];
                    _Level = Utils.Converter.ToInt(userPart[2]);
                    _UserType = userPart[3];
                    _IsAuthenticated = true;
                }
            }
        }

        /// <summary>
        /// Đăng nhập hệ thống
        /// </summary>
        /// <param name="id"></param>
        /// <param name="userName"></param>
        /// <param name="level"></param>
        public void LogIn(string id, string userName, int level)
        {
            string userType;
            if (level >=100000)
            {
                userType = WebUserType.SUPPERADMIN;
            }
            if (level >= 1000)
            {
                userType = WebUserType.ADMIN;
            }
            else if (level >= 100)
            {
                userType = WebUserType.MOD;
            }
            else if (level >= 50)
            {
                userType = WebUserType.CUSTOMER_CARE;
            }
            else if (level >= 10)
            {
                userType = WebUserType.PARTNER;
            }
            else
            {
                userType = WebUserType.CUSTOMER;
            }

            string userInfo = string.Format("{0};{1};{2};{3}", id, userName, level, userType);
            System.Web.Security.FormsAuthenticationTicket userTicket = new FormsAuthenticationTicket(userInfo, true, 600);
            string encryptedUserTicket = FormsAuthentication.Encrypt(userTicket);
            HttpCookie userCoookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedUserTicket);
            HttpContext.Current.Response.Cookies.Add(userCoookie);
            HttpContext.Current.Session.Timeout = 120;
        }

        /// <summary>
        /// Đăng xuất khỏi hệ thống
        /// </summary>
        public void LogOut()
        {
            FormsAuthentication.SignOut();
            HttpContext.Current.Session.Abandon();
            _ID = "";
            _UserName = "";
            _UserType = WebUserType.UNKNOWN;
            _IsAuthenticated = false;
        }

        #region Properties

        private string _ID = "";
        /// <summary>
        /// Tên đăng nhập
        /// </summary>
        public string ID
        {
            get { return _ID; }
        }

        private string _UserName = "";
        /// <summary>
        /// Tên gọi đầy đủ của User (họ và tên)
        /// </summary>
        public string UserName
        {
            get { return _UserName; }
        }

        public int _Level = 0;
        /// <summary>
        /// Giá trị số quy định Level của User
        /// </summary>
        public int Level
        {
            get { return _Level; }
        }

        private string _UserType = WebUserType.UNKNOWN;
        /// <summary>
        /// Kiểu user
        /// </summary>
        public string UserType
        {
            get { return _UserType; }
        }

        private bool _IsAuthenticated = false;
        /// <summary>
        /// User đã được xác thực (đã đăng nhập)?
        /// </summary>
        public bool IsAuthenticated
        {
            get { return _IsAuthenticated; }
        }


        #endregion

    }
}
